iT邦幫忙

2025 iThome 鐵人賽

DAY 9
1
Software Development

30 天的 .Net gRPC 迷途系列 第 9

Day9 gRPC Server Stream 建立

  • 分享至 

  • xImage
  •  

這邊開始介紹, gRPC 裡面的 Server Stream 該怎麼進行,下面先來做一下前置作業

.proto 檔設定如下

syntax = "proto3";

// Server/Client 記得調整對應的 namespace
option csharp_namespace = "MyGrpcServer";

package streamDemo;

service StreamdemoService {
	rpc HelloReplyWithCount (StreamRequest) returns (stream StreamReply);
}

message StreamRequest{
	string Name = 1;
	int32 Count = 2;
}

message StreamReply{
	string Message = 1;
}

接著新增一個 StreamDemoService.cs

Server

using Grpc.Core;

namespace MyGrpcServer.Services
{
    public class StreamDemoService : StreamdemoService.StreamdemoServiceBase
    {
        public override async Task HelloReplyWithCount(StreamRequest request,
            IServerStreamWriter<StreamReply> responseStream,
            ServerCallContext context)
        {
            int count = request.Count;

            for (int i = 0; i <= count; i++)
            {
                await responseStream.WriteAsync(new StreamReply() { Message = $"Hello {request.Name},Reply Count: {i}" });
            }
        }
    }
}

Program.cs 記得要 Map 上面的服務,這樣才能正確的啟動

app.MapGrpcService<StreamDemoService>();

Client

GrpcChannel channel = GrpcChannel.ForAddress("https://localhost:7204");
var client = new StreamdemoService.StreamdemoServiceClient(channel);

var res = client.HelloReplyWithCount(new StreamRequest() { Name = "Server Stream Demo", Count = 5 });

await foreach (var item in res.ResponseStream.ReadAllAsync())
{
    Console.WriteLine(item.Message);
};

這樣我們就能啟動一個基本的 ServerStream 服務了


上一篇
Day 8 gRPC Stream 定義
系列文
30 天的 .Net gRPC 迷途9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言